package models

import (
	"gitee.com/tangrx/go-admin/utils"
	"log"
	"time"
)

// 用户表 用户表
type Sysusers struct {
	Userid        int64     `json:"user_id" db:"user_id"`                 // 用户Id
	Username      string    `json:"username" db:"username"`               // 用户账号
	Userpwd       string    `json:"userpwd" db:"userpwd"`                 // 密码
	Realname      string    `json:"realname" db:"realname"`               // 真是姓名
	Nickname      string    `json:"nickname" db:"nickname"`               // 昵称
	Sex           string    `json:"sex" db:"sex"`                         // 性别 性别 0 未知  1 男 2 女
	Salt          string    `json:"salt" db:"salt"`                       // 密码加密的盐
	Qq            string    `json:"qq" db:"qq"`                           // qq
	Weixin        string    `json:"weixin" db:"weixin"`                   // 微信
	Email         string    `json:"email" db:"email"`                     // 邮箱
	Phone         string    `json:"phone" db:"phone"`                     // 电话号码
	CreateTime    time.Time `json:"create_time" db:"create_time"`         // 创建时间
	LastLoginTime time.Time `json:"last_login_time" db:"last_login_time"` // 最后登录时间
	LastLoginIp   string    `json:"last_login_ip" db:"last_login_ip"`     // 最后登录ip
	Issup         int       `json:"is_sup" db:"is_sup"`                   // 是否超级管理员 是否超级管理员 0 否 1 是
	UserType      int       `json:"user_type" db:"user_type"`             // 用户类型 0 工厂用户 1 运营商用户 2 加盟商用户
	Idcard        string    `json:"idcard" db:"idcard"`                   //
	OrgId         int64     `json:"org_id" db:"org_id"`                   //
	CreateId      int64     `json:"create_id" db:"create_id"`             //
	UpdateId      int64     `json:"update_id" db:"update_id"`             //
	UpdateTime    time.Time `json:"update_time" db:"update_time"`         //
	UserStatus    int       `json:"user_status" db:"user_status"`         // 用户状态

}

// 用户登录
func UserLogin(username string) *Sysusers {
	sqlSelect := "select * from sys_users where username =$1 limit 1 offset 0 ;"
	db, _ := OpenDB()
	defer db.Close()
	user := []Sysusers{}
	db.Select(&user, sqlSelect, username)
	if len(user) > 0 {
		return &user[0]
	}
	return nil
}

// 获取用户列表（分页）
func GetUserList4Pager(form SearchForm) *PageResult {
	sqlWhere := " 1=1 "
	key := form.GetStr("key")
	params := make([]interface{}, 0)
	i := 1
	if len(key) > 0 {
		params = append(params, "%"+form.GetStr("key")+"%")
		sqlWhere += " and (realname like $" + utils.IntToStr(i) + " or nickname like $" + utils.IntToStr(i) +
			" or username like $" + utils.IntToStr(i) + ")"
		i++
	}

	if len(form.GetStr("userStatus")) > 0 {
		params = append(params, form.GetInt("userStatus"))
		sqlWhere += " and user_status = $" + utils.IntToStr(i)
		i++
	}

	return Page("", "*", "sys_users", sqlWhere, "", form.Page, params...)
}

// 获取用户信息
func GetUserInfo(id int64) *Sysusers {
	sqlSelect := "select * from sys_users  where user_id = $1;"

	db, _ := OpenDB()
	defer db.Close()
	user := []Sysusers{}
	err := db.Select(&user, sqlSelect, id)
	if err != nil {
		log.Fatalln(err)
		return nil
	}
	if len(user) > 0 {
		return &user[0]
	}

	return nil
}

// 删除用户
func DeleteUser(id int64) int64 {
	sqlSave := "delete from sys_users  where user_id=:user_id"
	db, _ := OpenDB()
	defer db.Close()
	param := map[string]interface{}{"user_id": id}
	result, err := db.NamedExec(sqlSave, param)
	if err != nil {
		log.Fatalln(err)
		return 0
	} else {
		i, _ := result.RowsAffected()
		return i
	}
}

// 添加用户
func AddUserData(user *Sysusers) int64 {
	sqlSave := `
		INSERT INTO sys_users(
        username, userpwd, realname, nickname, sex, salt, qq,
		weixin, email, phone, create_time, last_login_time, last_login_ip,
		is_sup, user_type, idcard, org_id, create_id, update_id, update_time,
		user_status) 
		VALUES (
		:username, :userpwd, :realname, :nickname, :sex, :salt, :qq, 
		:weixin, :email, :phone, CURRENT_TIMESTAMP, null, '', 
		:is_sup, :user_type, :idcard, :org_id, :create_id, :update_id, CURRENT_TIMESTAMP, 0)`
	db, _ := OpenDB()
	defer db.Close()
	result, err := db.NamedExec(sqlSave, user)
	if err != nil {
		log.Fatalln(err)
		return 0
	} else {
		i, _ := result.RowsAffected()
		return i
	}
}

// 更新用户信息
func UpdateUser(user *Sysusers) int64 {
	sqlSave := "update sys_users set nickname=:nickname,realname=:realname  where user_id=:user_id"
	db, _ := OpenDB()
	defer db.Close()
	result, err := db.NamedExec(sqlSave, user)
	if err != nil {
		log.Fatalln(err)
		return 0
	} else {
		i, _ := result.RowsAffected()
		return i
	}
}

// 登录后更新Ip和 登录时间
func Update4Login(id int64, ip string) int64 {
	sqlSave := "update sys_users set last_login_ip=:last_login_ip,last_login_time=CURRENT_TIMESTAMP  where user_id=:user_id"
	db, _ := OpenDB()
	defer db.Close()
	result, err := db.NamedExec(sqlSave, map[string]interface{}{
		"user_id":       id,
		"last_login_ip": ip,
	})
	if err != nil {
		log.Fatalln(err)
		return 0
	} else {
		i, _ := result.RowsAffected()
		return i
	}
}

// 重置密码
func ResetUserPwd(id int64, newpwd string) int64 {
	sqlSave := "update sys_users set userpwd=:userpwd where user_id=:user_id"
	db, _ := OpenDB()
	defer db.Close()
	result, err := db.NamedExec(sqlSave, map[string]interface{}{
		"user_id": id,
		"userpwd": newpwd,
	})
	if err != nil {
		log.Fatalln(err)
		return 0
	} else {
		i, _ := result.RowsAffected()
		return i
	}
}
